7831. Сумма без максимального

 

Дан массив из n целых чисел. Найдите сумму всех элементов массива, не равных максимальному.

 

Вход. В первой строке задано число n (n ≤ 100). Во второй строке задано n целых чисел, каждое из которых по модулю не превышает 100.

 

Выход. Выведите сумму всех элементов массива, которые не равны максимальному.

 

Пример входа

Пример выхода

5

5 9 3 4 6

18

 

 

РЕШЕНИЕ

обработка массива

 

Анализ алгоритма

Найдем максимальный элемент массива. Вычислим сумму всех чисел, не равных максимальному. Отметим, что максимальных элементов в массиве может быть несколько.

 

Пример

Наибольший элемент в приведенном примере равен 9.

Сумма элементов, не равных максимальному, равна 5 + 3 + 4 + 6 = 18.

 

Реализация алгоритма

Объявим рабочий массив.

 

int m[101];

 

Читаем входной массив.

 

scanf("%d",&n);

for(i = 0; i < n; i++)

  scanf("%d",&m[i]);

 

Вычисляем максимальный элемент mx.

 

mx = -100;

for(i = 0; i < n; i++)

  if (m[i] > mx) mx = m[i];

 

Находим сумму s всех чисел массива, не равных максимальному mx.

 

s = 0;

for(i = 0; i < n; i++)

 

Если текущий элемент m[i] не равен максимуму mx, то добавляем его к сумме s.

 

  if (m[i] != mx) s += m[i];

 

Выводим искомую сумму.

 

printf("%d\n",s);

 

Реализация алгоритма – STL

Читаем входные данные. Входную последовательность храним в векторе v.

 

scanf("%d", &n);

v.resize(n);

for (i = 0; i < n; i++)

  scanf("%d", &v[i]);

 

Находим максимальный элемент mx.

 

mx = *max_element(v.begin(), v.end());

 

Заменим все элементы mx в массиве на 0.

 

replace(v.begin(), v.end(), mx, 0);

 

Найдем сумму всех элементов в массиве (максимальные элементы в нем заменены на 0).

 

s = accumulate(v.begin(), v.end(), 0);

 

Выводим ответ – сумму всех элементов без максимальных.

 

printf("%d\n", s);

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();

    int m[] = new int[n];

    for (int i = 0; i < n; i++)

      m[i] = con.nextInt();

   

    int max = -100;

    for(int i = 0; i < n; i++)

      if (m[i] > max) max = m[i];

 

    int s = 0;

    for(int i = 0; i < n; i++)

      if (m[i] != max) s += m[i];

   

    System.out.println(s);

    con.close();

  }

}

 

Python реализация

Читаем входные данные.

 

n = int(input())

lst = list(map(int,input().split()))

 

Находим максимальный элемент mx списка lst.

 

mx = max(lst)

 

В переменной sum находим сумму всех элементов списка lst, не равных максимальному значению mx.

 

sum = 0

for x in lst:

  if x != mx: sum += x

 

Выводим ответ.

 

print(sum)

 

Python реализация – суммирование

Читаем входные данные.

 

n = int(input())

lst = list(map(int,input().split()))

 

Находим максимальный элемент списка mx.

 

mx = max(lst)

 

В переменной res вычисляем сумму всех элементов списка lst, не равных максимальному значению mx.

 

res = sum(x for x in lst if x != mx)

 

Выводим ответ.

 

print(res)